package com.xbongbong.saas.enums;

import com.xbongbong.i18n.util.I18nMessageUtil;
import java.util.ArrayList;
import java.util.List;

import com.xbongbong.saas.constant.StringConstant;
import lombok.Getter;

/**
 * @description:
 * 考核方式：1动态数值型,2固定数值型。
 * 动态数值型：每个目标在不同时间段的值不一致；基本通用于所有考核目标。
 * 动态数值型：是指每个目标在不同时间段的值都一致；使用于“跟进次数”等考核目标。
 * @Author: hongxiao
 * @date: 2019-01-26 10:33
 * @since v1.0
 */
@Getter
public enum AssessTypeEnum {
    /*
     * 考核方式枚举
     */
    CHANGE(1, "change", "enum.assessType.name.change"),
    FIXED(2, "fixed", "enum.assessType.name.fixed"),

    ;

    /** 枚举值 -- */
    private final int code;
    /** 枚举描述 --英文名称*/
    private final String	alias;
    /** 枚举信息--中文名称 */
    private final String    name;

    AssessTypeEnum(int code, String alias, String name) {
        this.code = code;
        this.alias = alias;
        this.name = name;
    }

    /**
     * 获取全部枚举
     *
     * @return List<AssessTypeEnum>
     */
    public static List<AssessTypeEnum> getAllEnum() {
        List<AssessTypeEnum> list = new ArrayList<>();
        for (AssessTypeEnum cache : values()) {
            list.add(cache);
        }
        return list;
    }

    /**
     * 根据alias获取枚举
     * @return
     */
    public static AssessTypeEnum getByCode(int code) {
        for (AssessTypeEnum cache : values()) {
            if (code == cache.getCode()) {
                return cache;
            }
        }
        return null;
    }

    public String getName() {
        return I18nMessageUtil.getMessage(name);
    }

    /**
     * 根据code匹配枚举，未匹配则返回404
     *
     * @param code
     * @return com.xbongbong.saas.enums.AssessTypeEnum
     * @author zyy
     * @date 2022/3/31
     * @version v1.0
     */
    public static String getByCodeNotNull(int code) {
        AssessTypeEnum typeEnum = getByCode(code);
        return typeEnum != null ? typeEnum.getName() : StringConstant.NOT_FIND;
    }
}
